package com.cmcc.groupcontacts.util;

import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 各种数据类型验证工具
 * 
 * @author 
 * 
 */
public class ValidationUtil {
	/**
	 * 对象的非空校验
	 * 
	 * @param value
	 * @return
	 */
	public static boolean isNullOrEmpty(Object value) {
		return value == null;
	}

	/**
	 * 字符串对象的非空校验
	 * 
	 * @param value
	 * @return
	 */
	public static boolean isNullOrEmpty(String value) {
		return value == null || value.length() == 0;
	}

	/**
	 * 整形对象的非空校验
	 * 
	 * @param value
	 * @return
	 */
	public static boolean isNullOrZero(Integer value) {
		return value == null || value == 0;
	}

	/**
	 * 长整形对象的非空校验
	 * 
	 * @param value
	 * @return
	 */
	public static boolean isNullOrZero(Long value) {
		return value == null || value == 0;
	}

	/**
	 * 布尔对象的非空校验
	 * 
	 * @param value
	 * @return
	 */
	public static boolean isNullOrFalse(Boolean value) {
		return value == null || !value;
	}

	/**
	 * 数组的非空校验
	 * 
	 * @param list
	 * @return
	 */
	public static <T extends Object> boolean isNullOrEmpty(T[] array) {
		return array == null || array.length == 0;
	}

	/**
	 * List的非空校验
	 * 
	 * @param list
	 * @return
	 */
	public static boolean isNullOrEmpty(List<? extends Object> list) {
		return list == null || list.isEmpty();
	}

	/**
	 * Map的非空校验
	 * 
	 * @param map
	 * @return
	 */
	public static boolean isNullOrEmpty(Map<? extends Object, ? extends Object> map) {
		return map == null || map.isEmpty();
	}

	/**
	 * Set的非空校验
	 * 
	 * @param set
	 * @return
	 */
	public static boolean isNullOrEmpty(Set<? extends Object> set) {
		return set == null || set.isEmpty();
	}
	
	/**
	 * 是否全是数字
	 * 
	 * @param str
	 * @return
	 */
	public static boolean IsNumber(String str) {
		if (ValidationUtil.isNullOrEmpty(str)) {
			return false;
		}
		
		Pattern p = Pattern.compile("^[0-9]*$");
		Matcher m = p.matcher(str);
		return m.matches();
	}

	/**
	 * 是否全是非零的正整数，注：0123也不行
	 * 
	 * @param str
	 * @return
	 */
	public static boolean IsPositiveNumber(String str) {
		if (ValidationUtil.isNullOrEmpty(str)) {
			return false;
		}

		Pattern p = Pattern.compile("^\\+?[1-9][0-9]*$");
		Matcher m = p.matcher(str);
		return m.matches();
	}

	/**
	 * 判断是否为字母
	 * 
	 * @param str
	 * @return
	 */
	public static boolean isLetter(String str) {
		if (ValidationUtil.isNullOrEmpty(str)) {
			return false;
		}

		Pattern pattern = Pattern.compile("^[A-Za-z]+$");
		Matcher m = pattern.matcher(str);
		return m.matches();
	}
}
